Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

128
Visualizações
Usar "leer" para establecer variables

En bash desde la CLI puedo hacer:

 $ ERR_TYPE=$"OVERLOAD" $ echo $ERR_TYPE OVERLOAD $ read ${ERR_TYPE}_ERROR 1234 $ echo $OVERLOAD_ERROR 1234

Esto funciona muy bien para establecer mi nombre de variable dinámicamente; en un script no funciona. Lo intenté:

 #!/bin/env bash ERR_TYPE=("${ERR_TYPE[@]}" "OVERLOAD" "PANIC" "FATAL") for i in "${ERR_TYPE[@]}" do sh -c $(echo ${i}_ERROR=$"1234") done echo $OVERLOAD_ERROR # output is blank # I also tried these: # ${i}_ERROR=$(echo ${i}_ERROR=$"1234") # command not found # read ${i}_ERROR=$(echo ${i}_ERROR=$"1234") # it never terminates

¿Cómo configuraría una variable como lo hago desde CLI, pero en un script? Gracias

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Cuando usa nombres de variables dinámicas en lugar de matrices asociativas, realmente necesita cuestionar su enfoque.

 err_type=("OVERLOAD" "PANIC" "FATAL") declare -A error for type in "${err_type[@]}"; do error[$type]=1234 done

Sin embargo, en bash usarías declare :

 declare "${i}_error=1234"

Su enfoque falla porque genera un nuevo shell, pasa el comando OVERLOAD_ERROR=1234 y luego sale del shell. Su shell actual no se ve afectado en absoluto.

Quítese el hábito de usar ALLCAPSVARNAMES. Un día escribirá PATH=... y luego se preguntará por qué su script no funciona.

over 4 years ago · Santiago Trujillo Relatório

0

Yo usaría eval . Sin embargo, creo que esto se consideraría una mala práctica (tenía algo que ver con el hecho de que eval es "malvado" porque permite una mala entrada o algo así):

 eval "${i}_ERROR=1234"
over 4 years ago · Santiago Trujillo Relatório

0

Si la variable contendrá un número, puede usar let .

 #!/bin/bash ERR_TYPE=("OVERLOAD" "PANIC" "FATAL") j=0 for i in "${ERR_TYPE[@]}" do let ${i}_ERROR=1000+j++ done echo $OVERLOAD_ERROR echo $PANIC_ERROR echo $FATAL_ERROR

Esto da como resultado:

 1000 1001 1002
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda